package com.stylefeng.guns.core.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class WebClientUtil {

	private static Logger log = LoggerFactory.getLogger(WebClientUtil.class);

	public static Document getHtmlPage(String url, int waitTime) {
		// 设置浏览器版本
		WebClient wc = new WebClient(BrowserVersion.CHROME);
		// 是否使用不安全的SSL
		wc.getOptions().setUseInsecureSSL(true);
		// 启用JS解释器，默认为true
		wc.getOptions().setJavaScriptEnabled(true);
		// 禁用CSS
		wc.getOptions().setCssEnabled(false);
		// js运行错误时，是否抛出异常
		wc.getOptions().setThrowExceptionOnScriptError(false);
		// 状态码错误时，是否抛出异常
		wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
		// 是否允许使用ActiveX
		wc.getOptions().setActiveXNative(false);
		// 等待js时间
		wc.waitForBackgroundJavaScript(600 * 1000);
		// 设置Ajax异步处理控制器即启用Ajax支持
		wc.setAjaxController(new NicelyResynchronizingAjaxController());
		// 设置超时时间
		wc.getOptions().setTimeout(waitTime);
		// 不跟踪抓取
		wc.getOptions().setDoNotTrackEnabled(false);
		try {
			// 模拟浏览器打开一个目标网址
			HtmlPage htmlPage = wc.getPage(url);
			Thread.sleep(1000);// 这个线程的等待 因为js加载需要时间的
			String xml = htmlPage.asXml();
			return Jsoup.parse(xml);
		} catch (Exception e) {
			log.error("调用出错!",e);
			return null;
		}
	}
	
	public static void main(String[] args) {
		getHtmlPage("http://cn0512.gitee.io/ykquantpublisher/strategy/m60-macdkdj.html",5000);
	}
}
